#ifndef CW2015_H
#define CW2015_H

#include <stdint.h>
#include "esp_err.h"

// 寄存器地址定义
#define CW2015_ADDR              0x62
#define REG_VERSION              0x00
#define REG_VCELL               0x02
#define REG_SOC                 0x04
#define REG_RRT_ALERT           0x06
#define REG_CONFIG              0x08
#define REG_MODE                0x0A
#define REG_BATINFO             0x10

// 模式定义
#define MODE_SLEEP_MASK         (0x3<<6)
#define MODE_SLEEP              (0x3<<6)
#define MODE_NORMAL             (0x0<<6)
#define MODE_QUICK_START        (0x3<<4)
#define MODE_RESTART            (0xf<<0)

// 配置定义
#define CONFIG_UPDATE_FLG       (0x1<<1)
#define ATHD                    (0x0<<3)        //ATHD = 0%

// 电池参数定义
#define BATTERY_UP_MAX_CHANGE   720  // 充电时最大变化率
#define BATTERY_DOWN_MIN_CHANGE 60   // 放电时最小变化率
#define BATTERY_DOWN_MIN_CHANGE_SLEEP 1800
#define SIZE_BATINFO            64   // 电池建模信息大小

// 电池信息结构体
typedef struct {
    uint8_t usb_online;     // 充电状态
    uint32_t capacity;      // 电池容量(%)
    uint32_t voltage;       // 电池电压(mV)
    uint8_t alt;           // 警报状态
} cw_battery_t;

// 函数声明
esp_err_t cw2015_init(void);
esp_err_t cw2015_get_voltage(float *voltage);
esp_err_t cw2015_get_soc(float *soc);
esp_err_t cw2015_get_remaining_time(uint16_t *minutes);
esp_err_t cw2015_set_alert_threshold(uint8_t percent);
esp_err_t cw2015_quick_start(void);
esp_err_t cw2015_power_reset(void);

#endif // CW2015_H 